import config from '../config/index.js'
export const baseUrl = process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro
//出去网关的通用地址
export const baseUrlIp = baseUrl
	.split('/')
	.slice(0, 3)
	.join('/')

//上传文件通用地址
export const actionUrl = baseUrl + '/api/public/file/upload'

// 下载图片通用地址
export const getImgUrl = (name) => {
	if (!name) return name
	if (name.match(/^http/)) {
		return name
	} else {
		return baseUrlIp + name
	}
}

/**
 * 格式化日期为YYYY-MM-DD格式
 * @param {Date|String|Array} date 日期对象、日期字符串或日期数组[年,月,日]
 * @returns {String} 格式化后的日期字符串
 */
export const formatDate = (date) => {
	if (!date) return "";
	
	let year, month, day;
	
	// 处理数组格式的日期 [年, 月, 日]
	if (Array.isArray(date)) {
		year = date[0];
		month = date[1];
		day = date[2];
	} else {
		// 处理日期对象或日期字符串
		const dateObj = date instanceof Date ? date : new Date(date);
		year = dateObj.getFullYear();
		month = dateObj.getMonth() + 1;
		day = dateObj.getDate();
	}
	
	// 确保月份和日期是两位数
	const monthStr = month.toString().padStart(2, "0");
	const dayStr = day.toString().padStart(2, "0");
	
	return `${year}-${monthStr}-${dayStr}`;
}

/**
 * 格式化日期为YYYY年MM月DD日格式
 * @param {Date|String|Array} date 日期对象、日期字符串或日期数组[年,月,日]
 * @returns {String} 格式化后的日期字符串
 */
export const formatDateChinese = (date) => {
	if (!date) return "";
	
	let year, month, day;
	
	// 处理数组格式的日期 [年, 月, 日]
	if (Array.isArray(date)) {
		year = date[0];
		month = date[1];
		day = date[2];
	} else {
		// 处理日期对象或日期字符串
		const dateObj = date instanceof Date ? date : new Date(date);
		year = dateObj.getFullYear();
		month = dateObj.getMonth() + 1;
		day = dateObj.getDate();
	}
	
	// 确保月份和日期是两位数
	const monthStr = month.toString().padStart(2, "0");
	const dayStr = day.toString().padStart(2, "0");
	
	return `${year}年${monthStr}月${dayStr}日`;
}

/**
 * 格式化日期为YYYY-MM-DD格式
 * @param {Date|String|Array} date 日期对象、日期字符串或日期数组[年,月,日]
 * @returns {String} 格式化后的日期字符串
 */
export const formatDateEn = (date) => {
	if (!date) return "";
	
	let year, month, day;
	
	// 处理数组格式的日期 [年, 月, 日]
	if (Array.isArray(date)) {
		year = date[0];
		month = date[1];
		day = date[2];
	} else {
		// 处理日期对象或日期字符串
		const dateObj = date instanceof Date ? date : new Date(date);
		year = dateObj.getFullYear();
		month = dateObj.getMonth() + 1;
		day = dateObj.getDate();
	}
	
	// 确保月份和日期是两位数
	const monthStr = month.toString().padStart(2, "0");
	const dayStr = day.toString().padStart(2, "0");
	
	return `${year}-${monthStr}-${dayStr}`;
}

/**
 * 格式化图片字段，将字符串转为数组
 * @param {String|Array} images 图片字符串或数组
 * @returns {Array} 图片数组
 */
export const formatImages = (images) => {
	if (!images) return [];
	if (typeof images === 'string') {
		if (images.includes(',')) {
			return images.split(',');
		}
		return [images];
	}
	return Array.isArray(images) ? images : [];
}

/**
 * 将时间转换为ISO格式(2019-08-24T14:15:22.123Z)
 * @param {Date|String|Array|Number} date 日期对象、日期字符串、日期数组[年,月,日]或时间戳
 * @returns {String} ISO格式的时间字符串
 */
export const formatToISOString = (date) => {
	if (!date) return "";
	
	let dateObj;
	
	// 处理不同类型的日期输入
	if (Array.isArray(date)) {
		// 如果是数组格式 [年, 月, 日, 时, 分, 秒]
		const year = date[0];
		const month = date[1] - 1; // JavaScript月份从0开始
		const day = date[2] || 1;
		const hour = date[3] || 0;
		const minute = date[4] || 0;
		const second = date[5] || 0;
		const millisecond = date[6] || 0;
		
		dateObj = new Date(year, month, day, hour, minute, second, millisecond);
	} else if (typeof date === 'number') {
		// 如果是时间戳
		dateObj = new Date(date);
	} else if (typeof date === 'string') {
		// 如果是字符串格式
		dateObj = new Date(date);
	} else if (date instanceof Date) {
		// 如果已经是Date对象
		dateObj = date;
	} else {
		return "";
	}
	
	// 使用Date对象的toISOString方法转换为ISO格式
	return dateObj.toISOString();
}

/**
 * 获取默认的日期范围（当天到当天）
 * @returns {Object} 包含日期范围和显示文本的对象
 */
export const getDefaultDateRange = () => {
    const today = new Date()
    const dateStr = formatDate(today)
    
    return {
        dateRange: [dateStr, dateStr],
        dateRangeText: `${dateStr} 至 ${dateStr}`
    }
}